package fr.esisar.cs420.traitement;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import org.eclipse.swt.widgets.Display;
import fr.esisar.cs420.swt.InterfaceUtilisateur;
import oracle.jdbc.pool.OracleDataSource;

/**
 * Classe      : Application
 * Explication : Classe permettant de lancer l'application
 * @author Hermitte : Dieng : Delay
 *
 */
public class Application {

		/**
		 * Connection à la base de donnée
		 */
		private static Statement stmt;
		/**
		 * Information du client actuellement connécté à l'application
		 */
		public static Client client = new Client();
		
		/**
		 * Méthode permettant d'obtenir la connection à la base de donnée
		 * @return Statement de la connection
		 */
		public static Statement getStmt() {
			return stmt;
		}

		/**
		 * Méthode permettant d'initialiser la connexion à la base de donnée
		 */
		public static void setStmt() {
		
			try
			{
				String url = "jdbc:oracle:thin:@localhost:1521:XE";
				// Create a OracleDataSource instance and set properties
				OracleDataSource ods = new OracleDataSource();
				ods.setUser("userir");
				ods.setPassword("userir");
				ods.setURL(url);

				// Connect to the database
				Connection conn = ods.getConnection();

				// Create a Statement
				Application.stmt = conn.createStatement();

				// Passage de la transaction en lecture écriture avec le niveau d'isolation maximum
				Application.stmt.executeUpdate("SET TRANSACTION ISOLATION LEVEL SERIALIZABLE");

			} 
			catch (SQLException e)
			{
				System.out.println("Erreur SQL :" + e.getMessage());
				e.printStackTrace();
			}
		}
		
		/**
		 * Main : permettant de lancer l'application
		 * @param args
		 */
		public static void main(String[] args){
			
				/* initialisation de la connexion à la base de donnée */
			    Application.setStmt();
			    
			    System.out.println("Bienvenue dans ddh Pictures !");
			    
			    System.out.println("Connexion base de donnée : OK !");
			
			    /* Lancement de l'application */
				try {
					Display display = Display.getDefault();
					InterfaceUtilisateur shell = new InterfaceUtilisateur(display);
					shell.open();
					shell.layout();
					while (!shell.isDisposed()) {
						if (!display.readAndDispatch()) {
							display.sleep();
						}
					}
				} catch (Exception e1) {
					e1.printStackTrace();
			}
				
				try {
					Application.getStmt().close();
					System.out.println("Connexion base de donnée : FERME !");
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}

		}

}
